﻿from PIL import Image, ImageDraw, ImageFont, ImageEnhance
import numpy as np

def create_text_watermark(text="Watermark", 
                         font_size=40, 
                         opacity=0.5, 
                         angle=30, 
                         font_path=None,
                         output_path="watermark.png"):
    """
    生成透明文字水印
    参数：
    text : 水印文字内容
    font_size : 字体大小（像素）
    opacity : 不透明度 (0.0-1.0)
    angle : 旋转角度（度数）
    font_path : 自定义字体路径（None使用默认字体）
    output_path : 输出文件路径
    """
    # 创建临时图像测量文本尺寸
    temp_image = Image.new("RGBA", (1,1))
    temp_draw = ImageDraw.Draw(temp_image)
    
    # 加载字体（优先使用自定义字体）
    try:
        if font_path:
            font = ImageFont.truetype(font_path, font_size)
        else:
            font = ImageFont.load_default()  # 默认字体可能不支持中文
            font = font.font_variant(size=font_size)
    except:
        font = ImageFont.load_default().font_variant(size=font_size)
    
    # 获取文本尺寸
    bbox = temp_draw.textbbox((0,0), text, font=font)
    text_width = bbox[2] - bbox[0]
    text_height = bbox[3] - bbox[1]
    
    # 创建透明画布（四周留20%边距）
    image = Image.new("RGBA", 
                    (int(text_width*1.4), int(text_height*1.4)),
                    (255, 255, 255, 0))
    draw = ImageDraw.Draw(image)
    
    # 计算文字位置（居中）
    x = (image.width - text_width) / 2 - bbox[0]
    y = (image.height - text_height) / 2 - bbox[1]
    
    # 绘制半透明文字
    draw.text((x, y), text, font=font, fill=(255, 255, 255, int(255*opacity)))
    
    # 旋转图像
    if angle != 0:
        image = image.rotate(angle, expand=1, fillcolor=(0,0,0,0))
    
    # 保存为PNG
    image.save(output_path, "PNG")
    print(f"水印已保存至：{output_path}")

if __name__ == "__main__":
    # 示例用法（生成带透明度的旋转水印）
    create_text_watermark(
        text="© Your Brand",  # 支持中文需指定中文字体路径
        font_size=45,
        opacity=0.3,         # 值越小越透明
        angle=-45,           # 旋转角度
        font_path=None,      # 例如："msyh.ttc"（微软雅黑字体）
        output_path="custom_watermark.png"
    )